#ifndef PLUSMINUSBUTTON_H
#define PLUSMINUSBUTTON_H

#include <QPushButton>
#include <QPainter>
#include <QPixmap>

// 按钮状态：加号或减号
enum class PlusMinuType
{
    Plus,  // 加号
    Minus  // 减号
};

// 按钮形状
enum class ButtonShape
{
    Square,   // 方形
    Rounded,  // 圆角方形
    Circle    // 圆形
};

class PlusMinusButton : public QPushButton
{
    Q_OBJECT

  public:
    explicit PlusMinusButton(PlusMinuType type, QWidget* parent = nullptr);

    // 设置按钮类型
    void setType(PlusMinuType type);

    // 设置边框颜色和宽度
    void setBorderColor(const QColor& color);
    void setBorderWidth(int width);

    // 设置符号颜色
    void setSymbolColor(const QColor& color);

    // 设置按钮形状
    void setButtonShape(ButtonShape shape);

    // 设置圆角半径（仅对圆角方形有效）
    void setCornerRadius(int radius);

  protected:
    void paintEvent(QPaintEvent* event) override;
    bool event(QEvent* event) override;
    void resizeEvent(QResizeEvent* event) override;

  private:
    void generateCache();
    void drawPlusSymbol(QPainter& painter, int centerX, int centerY);
    void drawMinusSymbol(QPainter& painter, int centerX, int centerY);
    void drawBackground(QPainter& painter, const QRect& rect);

  private:
    PlusMinuType m_type;        // 当前按钮类型
    ButtonShape m_buttonShape;  // 按钮形状
    QColor m_borderColor;       // 边框颜色
    int m_borderWidth;          // 边框宽度
    QColor m_symbolColor;       // 符号颜色
    int m_cornerRadius;         // 圆角半径
    bool m_isHovered;           // 悬停状态
    QPixmap m_cache;            // 缓存图像
};

#endif  // PLUSMINUSBUTTON_H